#include <stdio.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>

#define START	100
#define END		300

static int is_primer(int n);

int main(void)
{
	pid_t pid;
	int i;

	for (i = START; i <= END; i++) {
		pid = fork();
		if (-1 == pid) {
			perror("fork()");
			exit(1);
		}
		if (0 == pid) {
			// child
			if (is_primer(i))
				printf("[%d]%d is a primer\n", getpid(), i);
			exit(0);
		}
	}

	// 所有的工作进程资源回收
	for (i = START; i <= END; i++)
		wait(NULL);

	return 0;
}

static int is_primer(int n)
{
	int i;

	sleep(1);
	for (i = 2; i < n; i++) {
		if (n % i == 0)
			return 0;
	}

	return 1;
}


